import { DeepPartial, FindOneOptions, Repository } from 'typeorm';
import { Injectable } from '@nestjs/common';
import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity';

@Injectable()
export abstract class MysqlBaseService<T>{
  constructor(
    protected readonly repository: Repository<T>
  ) {}

  async findAll(){
    return this.repository.find();
  }

  async findOne(options:FindOneOptions<T>){
    return this.repository.findOne(options)
  }
  async create(createDto:DeepPartial<T>){
    // save 可以实现插入和更新，如果传入的对象有ID，则会更新，没有就会保存
    // insert 只能插入
    // update 只能更新

    /**
     * repository.create  不是保存用户，是创建一个新的实体，保存的时候可以保存这个实体，把一个普通对象变成一个实体，本身不会操作数据库
     */
    const entity = await this.repository.save(createDto)
    return entity
  }

  async update(id: number, updateDto:QueryDeepPartialEntity<T>) {
    return this.repository.update(id,updateDto);
  }

  async delete(id: number) {
    return this.repository.delete(id);
  }

  
}